package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import dominio.Invitacion;

public class InvitacionDAO {
	public static Invitacion newInvitacion(String idArticulo, String idRevisor, String idEditor) throws Exception {
		Invitacion result=null;
		String SQL="Select Articulo.id, Revisor.dni, Editor.dni, idInvitacion, fecha, estado from Articulo, Revisor, Editor, Invitacion where " +
				"Articulo.id=Invitacion.idArticulo and Invitacion.idArticulo=? and" +
				"Revisor.dni=Invitacion.idRevisor and Invitacion.idRevisor=?" +
				"Editor.dni=Invitacion.IdEditor and Invitacion.IdEditor=?";
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Broker.get().getBD();
			p=bd.prepareStatement(SQL);
			p.setString(1, idArticulo);
			p.setString(2, idRevisor);
			p.setString(3, idEditor);
			ResultSet r=p.executeQuery();
			if (r.next()) {
				result=new Invitacion();
				result.setIdInvitacion(Integer.parseInt(r.getString(4)));
				result.setFecha(r.getString(5));
				result.setEstado(r.getString(6));
				result.setArticulo(ArticuloDAO.newArticulo(Integer.parseInt(r.getString(1))));
				result.setRevisor(RevisorDAO.newRevisor(r.getString(2)));
				result.setEditor(EditorDAO.newEditor(r.getString(3)));
			} else {
				throw new Exception("La invitacion identificada por  " + idArticulo + "-"+idRevisor+"-"+idEditor+" no existe");
			}
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
		return result;
	}
	
	public static void insert(Invitacion invitacion) throws Exception {
		//Se inserta -> idRevisor, idEditor, idInivitacion, fecha, Estado
		//String SQL="insert into Revista(nombre, emailEditor, dniPersona) values (?, ?, ?)";
		String SQL="Insert into Invitacion values (?, ?, ?, ?, ?)";
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Broker.get().getBD();
			p=bd.prepareStatement(SQL);
			p.setInt(1, invitacion.getIdInvitacion());
			p.executeUpdate();
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
	}

	public static void delete(Invitacion invitacion) throws Exception {
		String SQL="Delete from Invitacion where idArticulo=? and idRevisor=? and IdEditor=?";
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Broker.get().getBD();
			p=bd.prepareStatement(SQL);
			p.setString(1, Integer.toString(invitacion.getArticulo().getIdArticulo()));
			p.setString(2, invitacion.getRevisor().getDni());
			p.setString(3, invitacion.getEditor().getDni());
			p.executeUpdate();
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}	
	}
	
}
